
// 显式实例化int和double版本
// 在.cpp文件中
template <typename T>
T max(T a, T b)
{
    return a > b ? a : b;
}

// 显式实例化int版本
template int max<int>(int, int);

// 显式实例化double版本
template double max<double>(double, double);

// 在不同文件中的完整示例
// 头文件 (max.h)
#ifndef MAX_H
#define MAX_H

template <typename T>
T max(T a, T b)
{
    return a > b ? a : b;
}

// 声明外部实例化（可选，但推荐）
extern template int max<int>(int, int);
extern template double max<double>(double, double);

#endif // MAX_H

// 使用文件(main.cpp)
#include "max.h"
#include <iostream>

int main()
{
    // 使用已实例化的模板
    std::cout << "Max int: " << max(10, 20) << std::endl;
    std::cout << "Max double: " << max(3.14, 2.71) << std::endl;
    return 0;
}

// 类模板的显式实例化
// 类模板定义
template <typename T>
class Container
{
public:
    void add(T value);
    T get() const;

private:
    T value_;
};

// 实现成员函数
template <typename T>
void Container<T>::add(T value)
{
    value_ = value;
}

template <typename T>
T Container<T>::get() const
{
    return value_;
}

// 显式实例化整个类
template class Container<int>;
template class Container<double>;